// 微信SDK官方文档： https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
 // #ifdef H5
import jweixin from "./jweixin.js";
// import jweixin from "./jweixin-1.6.0.js"
import {wxUrls,getSignature,wxConfig,wechatLogin} from '@/utils/api.js' 
import config from '@/config.js'

// 微信SDK全局方法
const install = (Vue,vm) => { 
	const wxOauth = async () => {
	    // 非静默授权，第一次有弹框 
	    let code = getUrlCode1('code')
	    console.log('37code', code,window.location.href)
			
			console.log(uni.getStorageSync('wxcode'));
	    if (stringIsEmpty(code)) {
	        console.log('39code', code)
	        window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+config.appInfo.WeChat + '&redirect_uri=' + encodeURIComponent(window.location.href) + '&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect'
	        //redirect_uri地址里面不能多/，如果多一个/就会跳转不成功，所以redirect_path要注意是/pages/clue/cule
	        // redirect_uri是授权成功后，跳转的url地址，微信会帮我们跳转到该链接，并且通过？的形式拼接code，这里需要用encodeURIComponent对链接进行处理。
	        // 如果配置参数一一对应，那么此时已经通过回调地址刷新页面后，你就会再地址栏中看到code了。
	        // http://127.0.0.1/pages/views/profile/login/login?code=001BWV4J1lRzz00H4J1J1vRE4J1BWV4q&state=1
	    }else{
					uni.setStorageSync('wxcode',code) 
	        wxUrls({code:code,state:'STHAR'}).then((res) => {   
						uni.setStorageSync('OPENID',res.result); 
						console.log(res,'公众号-获取openId',uni.getStorageSync('OPENID')); 
						this.$store.commit("SET_OPENID", res.result);  
	        }).catch((err) => {}); 
					// return code
	    }
			
			// return code
	}
	const wxOauth1 = async () => {   
			// var uri = `${config.baseUrl}/#/pages/login/index`
			// alert(window.location.href) 
			// var uri = 'http://www.spadj.com/#/pages/login/index' 
				window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+config.appInfo.WeChat + '&redirect_uri=' + encodeURIComponent(window.location.href) + '&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect'
			// window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+config.appInfo.WeChat + '&redirect_uri=' + encodeURIComponent(window.location.href) + '&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect'
			console.log(code,window.location.href,"==========="); 
	}
	const getUrlCode1 = (name)=> {
	    let reg = ((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)')).exec(location.href) || [, ''])[1].replace(/\+/g, '%20')
	    console.log(decodeURIComponent(reg),"getUrlCode1");
	        return decodeURIComponent(reg) || null
	} 
	// 判断字符串是否为空，没有值返回true，有值，返回false
	const stringIsEmpty = function (obj){
	    if(typeof obj == "undefined" || obj == null || obj == ""){
	        return true;
	    }else{
	        return false;
	    }
	}
	// // 微信授权登录，不需要初始化微信SDK
	// const wxOauth = async (wechatAppId) => {
	// 	// 非静默授权，第一次有弹框 
	// 	const local = window.location.href; // 获取页面url
	// 	const code = getUrlCode().code; // 截取code 
	// 	console.log(code,local,"=========================="); 
	// 	if (code == null || code == '' || code == 'undefined') { 
	// 		const uri = encodeURIComponent(local) 
	// 		window.location.href =
	// 			`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wechatAppId}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=START&connect_redirect=1#wechat_redirect`
	// 	} else {
	// 		// uni.setStorageSync('CODE',code);
	// 		wxUrls({code:code,state:'STHAR'}).then((res) => { 
	// 			this.$store.commit("SET_OPENID", result.result); 
	// 			uni.setStorageSync('OPENID',result.result); 
	// 		}).catch((err) => {}); 
	// 		return code
	// 	} 
	// }
	
	// 非静默授权 获取用户的信息
	const wxLogin = async (wechatAppId,url) => {
		const local = window.location.href; // 获取页面url
		const uri = encodeURIComponent(local)
		window.location.href =
			`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.appInfo.WeChat}&redirect_uri=${uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`
	}

	// 订阅模板消息
	const wxSubscribeMsg = (index = 0) => {
		const local = window.location.href; // 获取页面url
		const uri = encodeURIComponent(local)
		const templatIds = ['NhIbwM7rt4mXd6x4hOnIC6UNj691g_e4NoNNOFnR034',
			'PLP8wrsX8VVRtdh4GzMD5Q7t9mTJwYwwFNHvM95tonE'
		]
		window.location.href =
			`https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=${wechatAppId}&scene=1000&template_id=${templatIds[index]}&redirect_url=${uri}&reserved=test#wechat_redirect`
	}

	// 判断是否是微信客户端
	const isWechat = () => {
		// true是微信客户端，false不是微信客户端
		const ua = window.navigator.userAgent.toLowerCase()
		return ua.match(/micromessenger/i) == 'micromessenger'
	}
	// 初始化SDK
	const init = async (callback) => {
		// const isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) //ios终端
		// 进行签名的时候  Android 不用使用之前的链接， ios 需要
		// const signLink = isiOS ? window.entryUrl : location.href.split('#')[0]
		//获取当前url然后传递给后台获取授权和签名信息，后台需要解码才能使用
		// const url = encodeURIComponent(location.href.split('#')[0]);
		console.log(location.href.split('#')[0]);
		// const url = encodeURIComponent(location.href.split('#')[0]);
		const url = location.href.split('#')[0];
		//const url = (signLink);
		//服务端进行签名
		const res = await getSignature({
			url
		})
		// 注意此处的返回值
		console.log(location.href.split('#')[0],res,"微信config")
		jweixin.config({
			debug: false,
			appId: res.result.appId,
			timestamp: res.result.timestamp,
			nonceStr: res.result.nonceStr,
			signature: res.result.signature,
			// jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
			// 	'editAddress', 'chooseImage',
			// 	'onMenuShareAppMessage', 'onMenuShareTimeline',
			// 	'chooseImage','scanQRCode',
			// 	'imagePreview', 'uploadImage',
			// 	'downloadImage', 'chooseWXPay',
			// 	'getLocation', 'openLocation'
			// ]
			jsApiList: [
				'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'openLocation', 'getLocation','scanQRCode',
				'chooseWXPay','updateAppMessageShareData', 'updateTimelineShareData','onMenuShareAppMessage', 'onMenuShareTimeline'
			], 
			openTagList: ['wx-open-subscribe']
		});
		jweixin.ready((res) => {
			// alert('初始化成功')
			console.log(res,'初始化成功');
			// window.alert('签名的URL：'+ signLink)
			callback && callback(res)
			 // jweixin.getLocation({
			 //   type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
			 //   success: function (res) {
				// 	 console.log(res,'地址');
			 //     var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
			 //     var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
			 //     var speed = res.speed; // 速度，以米/每秒计
			 //     var accuracy = res.accuracy; // 位置精度
			 //   }
			 // });
		})
		jweixin.error((res) => {
			// alert('初始化失败')
			console.log(res,"----------------------------");
		})
	}
	// 获取当前位置
	const getLocations = (callback, error) => {
		// vm.$u.init(() => {
			jweixin.getLocation({
				type: 'gcj02', //wgs84
				success: (res) => {
					callback && callback(res)
				},
				fail: function(err) {
					//alert("获取定位位置信息失败！")
					this.$u.getLocations()
				},
				cancel: function(res) {
					callback && callback(res)
					// alert('用户拒绝授权获取地理位置');
				}
			})
		// })
	}
	const getLocation = (callback, error) => { 
			jWeixin.getLocation({
					type: 'gcj02',
					success: (res) => {
						longitude.value = res.longitude
						latitude.value = res.latitude
						console.log('jssdk获取的位置:', res.longitude, res.latitude) 
					},
					cancel: (res) => {
							console.error("您已禁止获取位置信息")
					}
			}) 
	}
	// 打开位置， 参数 { lat:40.042542,lng:116.397128 }
	const openLocation = params => {
		console.log("打开地图位置");
		// vm.$u.init(() => {
			jweixin.openLocation({ //根据传入的坐标打开地图
				latitude: params.latitude, // 纬度，浮点数，范围为90 ~ -90
				longitude: params.longitude, // 经度，浮点数，范围为180 ~ -180。
				name: params.name || '', // 位置名
				address: params.address || '', // 地址详情说明
				scale: params.scale || 20, // 地图缩放级别,整型值,范围从1~28。默认为最大
				infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
			})
		// })
	}
	// 选择图片
	const chooseImage = (params = {}) => {
		// vm.$u.init(() => {
			jweixin.chooseImage({
				...params,
				success: (res) => {
					console.log(res,'上传图片')
					jweixin.getLocalImgData({
						localId: res.localIds[0],
						success: (data) => {
							console.log(data,"get图片");
							params.success && params.success(data)
						}
					})
				}
			})
		// })
	}
	// 获取图片数据
	const getLocalImgData = (params = {}) => {
		// vm.$u.init(() => {

		// })
	}
	// 预览图片
	const previewImage = (params = {}) => {
		// vm.$u.init(() => {
			jweixin.previewImage({
				...params
			})
		// })
	}

	// 微信支付
	const wxpay = (params = {}) => {
		// vm.$u.init(() => {
			console.log(params,"微信支付参数") 
			jweixin.chooseWXPay({
				...params,
				success: (res) => {
					console.log(res)
					// alert('支付ss')
					// console.log('微信JSAPI返回支付成功')
					params?.success(res)
				},
				cancel: (err) => {
					// alert('取消')
					console.log(err)
					params.cancel && params.cancel(err)
					// console.log('微信JSAPI取消支付')
				},
				fail: (err) => {
					// alert('失败')
					console.log(err)
					params.fail && params.fail(err)
					// console.log('微信JSAPI返回支付失败')
				},
			})
		// })
	}
	// 自定义分享
	const share = (params = {}) => {
		// vm.$u.init(() => {
			const shareData = {
				title: params?.title || '浴悦来了',
				desc: params?.desc || '舒缓疲劳，恢复活力！',
				link: params?.link || window.location.href,
				// imgUrl: params?.imgUrl ||
				// 	'https://test.spadj.com/policy/logo.png',
					imgUrl: params?.imgUrl ||
						`${config.imageUrl}/policy/logo.png`,
				success: (res) => {
					//用户点击分享后的回调，这里可以进行统计，例如分享送金币之类的
					// params?.success()
				},
			}
			//分享给朋友接口  	
			jweixin.updateAppMessageShareData(shareData)
			//分享到朋友圈接口  
			jweixin.updateTimelineShareData(shareData)
		// })
	}
	// 选择通讯地址，一般选择收货地址时用
	const chooseAddress = (callback) => {
		// vm.$u.init(() => {
			jweixin.openAddress({
				success: (res) => {
					callback && callback(res)
				}
			})
		// })
	}
	// 扫码
	const scanQRCode = (callback) => {
		// vm.$u.init(() => {
			jweixin.scanQRCode({
				needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
				scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码，默认二者都有
				success: (res) => {  
					callback && callback(res)
				},
				error: err => {
					alert(JSON.stringify(err)+'err')
					console.log(err)
				}
			})
		// })
	}
	// 截取url中的code
	const getUrlCode = () => {    
		// 截取url中的code方法
		const url = location.href 
		const theRequest = new Object()
		if (url.indexOf('?') != -1) {
			let str = url.substr(1)
			let strs = str.split('&')
			for (let i = 0; i < strs.length; i++) {
				theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
			}
		}  
		return theRequest 
	} 
	
	Vue.prototype.$u = {
		wxSubscribeMsg,
		wxLogin,
		wxOauth,
		wxOauth1,
		isWechat,
		init,
		getLocations,
		getLocation,
		openLocation,
		chooseImage,
		getLocalImgData,
		previewImage,
		wxpay,
		share,
		chooseAddress,
		scanQRCode
	}
	// 将各个定义的方法，统一放进对象挂载到vm.$u.wx(因为vm就是this，也即this.$u.wx)下
}
export default {
	install
} 
 // #endif